From d85dd6bd9882f5da894f5cf0ce77a66493c42223 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Thu, 8 Mar 2001 01:55:28 +0000 Subject: [PATCH] uglify so that size request gets tested. 2001-03-07 Havoc Pennington * gtk/testgtk.c (create_spins): uglify so that size request gets tested. * gtk/gtkspinbutton.c (gtk_spin_button_size_request): Base size request on values for upper/lower, completes #6152 --- ChangeLog | 8 ++++++++ ChangeLog.pre-2-0 | 8 ++++++++ ChangeLog.pre-2-10 | 8 ++++++++ ChangeLog.pre-2-2 | 8 ++++++++ ChangeLog.pre-2-4 | 8 ++++++++ ChangeLog.pre-2-6 | 8 ++++++++ ChangeLog.pre-2-8 | 8 ++++++++ gtk/gtkspinbutton.c | 42 +++++++++++++++++++++++++++++++++++++----- gtk/testgtk.c | 7 +++---- tests/testgtk.c | 7 +++---- 10 files changed, 99 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 12ee0ce7f1..7a4025cc9c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2001-03-07 Havoc Pennington + + * gtk/testgtk.c (create_spins): uglify so that size request gets + tested. + + * gtk/gtkspinbutton.c (gtk_spin_button_size_request): Base size + request on values for upper/lower, completes #6152 + Wed Mar 7 20:07:22 2001 Owen Taylor * Makefile.am: Remove gtk-config-2.0 again. diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 12ee0ce7f1..7a4025cc9c 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,11 @@ +2001-03-07 Havoc Pennington + + * gtk/testgtk.c (create_spins): uglify so that size request gets + tested. + + * gtk/gtkspinbutton.c (gtk_spin_button_size_request): Base size + request on values for upper/lower, completes #6152 + Wed Mar 7 20:07:22 2001 Owen Taylor * Makefile.am: Remove gtk-config-2.0 again. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 12ee0ce7f1..7a4025cc9c 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,11 @@ +2001-03-07 Havoc Pennington + + * gtk/testgtk.c (create_spins): uglify so that size request gets + tested. + + * gtk/gtkspinbutton.c (gtk_spin_button_size_request): Base size + request on values for upper/lower, completes #6152 + Wed Mar 7 20:07:22 2001 Owen Taylor * Makefile.am: Remove gtk-config-2.0 again. diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 12ee0ce7f1..7a4025cc9c 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,11 @@ +2001-03-07 Havoc Pennington + + * gtk/testgtk.c (create_spins): uglify so that size request gets + tested. + + * gtk/gtkspinbutton.c (gtk_spin_button_size_request): Base size + request on values for upper/lower, completes #6152 + Wed Mar 7 20:07:22 2001 Owen Taylor * Makefile.am: Remove gtk-config-2.0 again. diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 12ee0ce7f1..7a4025cc9c 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,11 @@ +2001-03-07 Havoc Pennington + + * gtk/testgtk.c (create_spins): uglify so that size request gets + tested. + + * gtk/gtkspinbutton.c (gtk_spin_button_size_request): Base size + request on values for upper/lower, completes #6152 + Wed Mar 7 20:07:22 2001 Owen Taylor * Makefile.am: Remove gtk-config-2.0 again. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 12ee0ce7f1..7a4025cc9c 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,11 @@ +2001-03-07 Havoc Pennington + + * gtk/testgtk.c (create_spins): uglify so that size request gets + tested. + + * gtk/gtkspinbutton.c (gtk_spin_button_size_request): Base size + request on values for upper/lower, completes #6152 + Wed Mar 7 20:07:22 2001 Owen Taylor * Makefile.am: Remove gtk-config-2.0 again. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 12ee0ce7f1..7a4025cc9c 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,11 @@ +2001-03-07 Havoc Pennington + + * gtk/testgtk.c (create_spins): uglify so that size request gets + tested. + + * gtk/gtkspinbutton.c (gtk_spin_button_size_request): Base size + request on values for upper/lower, completes #6152 + Wed Mar 7 20:07:22 2001 Owen Taylor * Makefile.am: Remove gtk-config-2.0 again. diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c index c20642021c..f33a3d59e2 100644 --- a/gtk/gtkspinbutton.c +++ b/gtk/gtkspinbutton.c @@ -483,18 +483,47 @@ gtk_spin_button_size_request (GtkWidget *widget, GtkRequisition *requisition) { GtkEntry *entry; + GtkSpinButton *spin_button; g_return_if_fail (widget != NULL); g_return_if_fail (requisition != NULL); g_return_if_fail (GTK_IS_SPIN_BUTTON (widget)); entry = GTK_ENTRY (widget); + spin_button = GTK_SPIN_BUTTON (widget); GTK_WIDGET_CLASS (parent_class)->size_request (widget, requisition); if (entry->width_chars < 0) - requisition->width = MIN_SPIN_BUTTON_WIDTH + ARROW_SIZE + - 2 * widget->style->xthickness; + { + PangoFontMetrics metrics; + PangoFont *font; + gchar *lang; + gchar buf[MAX_TEXT_LENGTH]; + gint width; + gint w; + + + font = pango_context_load_font (gtk_widget_get_pango_context (widget), + widget->style->font_desc); + lang = pango_context_get_lang (gtk_widget_get_pango_context (widget)); + pango_font_get_metrics (font, lang, &metrics); + g_free (lang); + g_object_unref (G_OBJECT (font)); + + /* Get max of MIN_SPIN_BUTTON_WIDTH, size of upper, size of lower */ + + width = MIN_SPIN_BUTTON_WIDTH; + + sprintf (buf, "%0.*f", spin_button->digits, spin_button->adjustment->upper); + w = strlen (buf) * PANGO_PIXELS (metrics.approximate_digit_width); + width = MAX (width, w); + sprintf (buf, "%0.*f", spin_button->digits, spin_button->adjustment->lower); + w = strlen (buf) * PANGO_PIXELS (metrics.approximate_digit_width); + width = MAX (width, w); + + requisition->width = width + ARROW_SIZE + 2 * widget->style->xthickness; + } else requisition->width += ARROW_SIZE + 2 * widget->style->xthickness; } @@ -1392,7 +1421,7 @@ gtk_spin_button_new (GtkAdjustment *adjustment, } /* Callback used when the spin button's adjustment changes. We need to redraw - * the arrows when the adjustment's range changes. + * the arrows when the adjustment's range changes, and reevaluate our size request. */ static void adjustment_changed_cb (GtkAdjustment *adjustment, gpointer data) @@ -1401,8 +1430,7 @@ adjustment_changed_cb (GtkAdjustment *adjustment, gpointer data) spin_button = GTK_SPIN_BUTTON (data); - gtk_spin_button_draw_arrow (spin_button, GTK_ARROW_UP); - gtk_spin_button_draw_arrow (spin_button, GTK_ARROW_DOWN); + gtk_widget_queue_resize (GTK_WIDGET (spin_button)); } void @@ -1431,6 +1459,8 @@ gtk_spin_button_set_adjustment (GtkSpinButton *spin_button, (GtkSignalFunc) adjustment_changed_cb, (gpointer) spin_button); } + + gtk_widget_queue_resize (GTK_WIDGET (spin_button)); } } @@ -1455,6 +1485,8 @@ gtk_spin_button_set_digits (GtkSpinButton *spin_button, { spin_button->digits = digits; gtk_spin_button_value_changed (spin_button->adjustment, spin_button); + /* since lower/upper may have changed */ + gtk_widget_queue_resize (GTK_WIDGET (spin_button)); } } diff --git a/gtk/testgtk.c b/gtk/testgtk.c index 88e62a748f..f8fa8ce721 100644 --- a/gtk/testgtk.c +++ b/gtk/testgtk.c @@ -3837,7 +3837,7 @@ create_spins (void) gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5); vbox2 = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5); + gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5); label = gtk_label_new ("Value :"); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); @@ -3847,11 +3847,10 @@ create_spins (void) 0.5, 100.0, 0.0); spinner1 = gtk_spin_button_new (adj, 1.0, 2); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE); - gtk_widget_set_usize (spinner1, 100, 0); gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0); vbox2 = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5); + gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5); label = gtk_label_new ("Digits :"); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); @@ -3865,7 +3864,7 @@ create_spins (void) gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0); hbox = gtk_hbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5); button = gtk_check_button_new_with_label ("Snap to 0.5-ticks"); gtk_signal_connect (GTK_OBJECT (button), "clicked", diff --git a/tests/testgtk.c b/tests/testgtk.c index 88e62a748f..f8fa8ce721 100644 --- a/tests/testgtk.c +++ b/tests/testgtk.c @@ -3837,7 +3837,7 @@ create_spins (void) gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5); vbox2 = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5); + gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5); label = gtk_label_new ("Value :"); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); @@ -3847,11 +3847,10 @@ create_spins (void) 0.5, 100.0, 0.0); spinner1 = gtk_spin_button_new (adj, 1.0, 2); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (spinner1), TRUE); - gtk_widget_set_usize (spinner1, 100, 0); gtk_box_pack_start (GTK_BOX (vbox2), spinner1, FALSE, TRUE, 0); vbox2 = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5); + gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 5); label = gtk_label_new ("Digits :"); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); @@ -3865,7 +3864,7 @@ create_spins (void) gtk_box_pack_start (GTK_BOX (vbox2), spinner2, FALSE, TRUE, 0); hbox = gtk_hbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 5); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5); button = gtk_check_button_new_with_label ("Snap to 0.5-ticks"); gtk_signal_connect (GTK_OBJECT (button), "clicked", -- 2.30.2